package model;

import java.util.ArrayList;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import factory.HibernateUtil;


public class UsuarioDao {



	public static List<Usuario> buscarTodos() {
	        List<Usuario> usuarios = new ArrayList<Usuario>();
	        Transaction trns = null;
	        Session session = HibernateUtil.getSession();
	        try {
	            trns = session.beginTransaction();
	            usuarios = session.createQuery("from Usuario").list();
	        } catch (RuntimeException e) {
	            e.printStackTrace();
	        } finally {
	            session.flush();
	            session.close();
	        }
	        return usuarios;
	    }
	
	public static List<Usuario> buscarTodosAtivos() {
        List<Usuario> usuarios = new ArrayList<Usuario>();
        Transaction trns = null;
        Session session = HibernateUtil.getSession();
        try {
            trns = session.beginTransaction();
            usuarios = session.createQuery("from Usuario where status = true").list();
        } catch (RuntimeException e) {
            e.printStackTrace();
        } finally {
            session.flush();
            session.close();
        }
        return usuarios;
    }
	 
	 public static void salvar(Usuario u){
		 Transaction trns = null;
		 Session session = HibernateUtil.getSession();
		 try {
			 trns = session.beginTransaction();
			 session.save(u);
			 session.getTransaction().commit();
		 } catch (RuntimeException e) {
			 if (trns != null) {
				 trns.rollback();
			 }
			 e.printStackTrace();
		 } finally {
			 session.flush();
			 session.close();
		 }
	 }
	 
	 public static Usuario buscarPorId(String id) {
	        Usuario usuario = new Usuario();
	        Transaction trns = null;
	        Session session = HibernateUtil.getSession();
	        Query query = session.createQuery("from Usuario where idUsuario = "+ id);
	        try {
	            trns = session.beginTransaction();
	            usuario = (Usuario) query.uniqueResult();
	        } catch (RuntimeException e) {
	            e.printStackTrace();
	        } finally {
	            session.flush();
	            session.close();
	        }
	        return usuario;
	    }
	 
	 public static Usuario verificaLoginSenha(String login, String senha){
		 	Usuario usuario = new Usuario();
	        Transaction trns = null;
	        Session session = HibernateUtil.getSession();
	        Query query = session.createQuery("from Usuario where login = '"+ login + "' and senha = '"+ senha + "'");
	        try {
	            trns = session.beginTransaction();
	            usuario = (Usuario) query.uniqueResult();
	        } catch (RuntimeException e) {
	            e.printStackTrace();
	        } finally {
	            session.flush();
	            session.close();
	        }
			if(usuario != null){
				return usuario;
			}
			return null; 
		}
	 
	 public static Usuario buscarPorCpfCnpj(String cpfCnpj) {
	        Usuario usuario = new Usuario();
	        Transaction trns = null;
	        Session session = HibernateUtil.getSession();
	        Query query = session.createQuery("from Usuario where cpfcnpj = '"+ cpfCnpj +"'");
	        try {
	            trns = session.beginTransaction();
	            usuario = (Usuario) query.uniqueResult();
	        } catch (RuntimeException e) {
	            e.printStackTrace();
	        } finally {
	            session.flush();
	            session.close();
	        }
	        return usuario;
	    }
	 
	 public static Usuario buscarPorLogin(String login) {
	        Usuario usuario = new Usuario();
	        Transaction trns = null;
	        Session session = HibernateUtil.getSession();
	        Query query = session.createQuery("from Usuario where login = '"+ login +"'");
	        try {
	            trns = session.beginTransaction();
	            usuario = (Usuario) query.uniqueResult();
	        } catch (RuntimeException e) {
	            e.printStackTrace();
	        } finally {
	            session.flush();
	            session.close();
	        }
	        return usuario;
	    }
	 
	 
	 
	 
	 public static void alterarUsuario(Usuario usuario) {
	        Transaction trns = null;
	        Session session = HibernateUtil.getSession();
	        try {
	            trns = session.beginTransaction();
	            session.update(usuario);
	            session.getTransaction().commit();
	        } catch (RuntimeException e) {
	            if (trns != null) {
	                trns.rollback();
	            }
	            e.printStackTrace();
	        } finally {
	            session.flush();
	            session.close();
	        }
	 }
	 
	 public static void excluirUsuario(Usuario usuario) {
	        Transaction trns = null;
	        Session session = HibernateUtil.getSession();
	        try {
	            trns = session.beginTransaction();
	            usuario.setStatus(false);
	            session.update(usuario);
	            session.getTransaction().commit();
	        } catch (RuntimeException e) {
	            if (trns != null) {
	                trns.rollback();
	            }
	            e.printStackTrace();
	        } finally {
	            session.flush();
	            session.close();
	        }
	    }
}
